找传奇、传世资源到传世资源站!

C++17 In Detail.pdf

8.5玩家评分(1人评分)
下载后可评
介绍 评论 失效链接反馈

from clipboardContentsAbout the Author . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iTechnical Reviewer . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iiAdditional Reviewers & Supporters . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iiiRevision History . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vPreface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viAbout the Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viiWho This Book is For . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viiOverall Structure of the Book . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viiiReader Feedback . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ixExample Code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ixPart 1 - The Language Features . . . . . . . . . . . . . . . . . . . . . . . 1Quick Start . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21. Fixes and Deprecation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5Removed Things . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6Fixes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132. Language Clarification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14Stricter Expression Evaluation Order . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15Guaranteed Copy Elision . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19Dynamic Memory Allocation for Over-Aligned Data . . . . . . . . . . . . . . . . . . . . . . . 24Exception Specifications as Part of the Type System . . . . . . . . . . . . . . . . . . . . . . . . 25Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253. General Language Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26Structured Binding Declarations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27Init Statement for if and switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34Inline Variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36constexpr Lambda Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38CONTENTSNested Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 414. Templates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42Template Argument Deduction for Class Templates . . . . . . . . . . . . . . . . . . . . . . . . 43Fold Expressions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47if constexpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50Declaring Non-Type Template Parameters With auto . . . . . . . . . . . . . . . . . . . . . . 58Other Changes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615. Standard Attributes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62Why Do We Need Attributes? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63Before C 11 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 63Attributes in C 11 and C 14 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64C 17 additions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66Section Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72Part 2 - The Standard Library Changes . . . . . . . . . . . . . . 736. std::optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75std::optional Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77Returning std::optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81Accessing The Stored Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83std::optional Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84Examples of std::optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86Performance & Memory Consideration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88Migration from boost::optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90Special case: optional<bool> and optional<T*> . . . . . . . . . . . . . . . . . . . . . . . . 90Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 917. std::variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93std::variant Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96Changing the Values . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 99Accessing the Stored Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101Visitors for std::variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102Other std::variant Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Exception Safety Guarantees . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107Performance & Memory Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108CONTENTSMigration From boost::variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109Examples of std::variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110Wrap Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1188. std::any . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120std::any Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122Changing the Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124Accessing The Stored Value . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125Performance & Memory Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 126Migration from boost::any . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127Examples of std::any . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127Wrap Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1309. std::string_view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131The Basics . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132The std::basic_string_view Type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133std::string_view Creation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134Other Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135Risks Using string_view . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137Initializing string Members from string_view . . . . . . . . . . . . . . . . . . . . . . . . . 141Handling Non-Null Terminated Strings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145Performance & Memory Considerations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147Migration from boost::string_ref and boost::string_view . . . . . . . . . . . . . . . 148Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 149Wrap Up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15210. String Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153Elementary String Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154Converting From Characters to Numbers: from_chars . . . . . . . . . . . . . . . . . . . . . 155Converting Numbers into Characters: to_chars . . . . . . . . . . . . . . . . . . . . . . . . . . 158The Benchmark . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16611. Searchers & String Matching . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167Overview of String Matching Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168New Algorithms Available in C 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 169Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176CONTENTS12. Filesystem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177Filesystem Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178Demo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 178The Path Object . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181The Directory Entry & Directory Iteration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189Supporting Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190Error Handling & File Races . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 196Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20413. Parallel STL Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 205Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 206Overview . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207Execution Policies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208Algorithm Update . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 213New Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214Performance of Parallel Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218Examples . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 219Chapter Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23214. Other Changes In The Library . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233std::byte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 234Improvements for Maps and Sets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235Return Type of Emplace Methods . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241Sampling Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242New Mathematical Functions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243Shared Pointers and Arrays . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245Non-member size(), data() and empty() . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246constexpr Additions to the Standard Library . . . . . . . . . . . . . . . . . . . . . . . . . . . 247std::scoped_lock . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 249std::iterator Is Deprecated . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250Polymorphic Allocator, pmr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 252Compiler support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254Part 3 - More Examples and Use Cases . . . . . . . . . . . . . .25515. Refactoring with std::optional and std::variant . . . . . . . . . . . . . . . . . . . . . 256The Use Case . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257The Tuple Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 258A Separate Structure . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 259With std::optional . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 260CONTENTSWith std::variant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261Wrap up . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26316. Enforcing Code Contracts With [[nodiscard]] . . . . . . . . . . . . . . . . . . . . . . . . 264Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265Where Can It Be Used? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 265How to Ignore [[nodiscard]] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 268Before C 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 269Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26917. Replacing enable_if with if constexpr - Factory with Variable Arguments . . . . . 270The Problem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271Before C 17 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 273With if constexpr . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274Summary . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27518. How to Parallelise CSV Reader . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 276Introduction and Requirements . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 277The Serial Version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278Using Parallel Algorithms . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284Wrap up & Discussion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290Appendix A - Compiler Support . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293GCC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293Clang . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293VisualStudio - MSVC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293Compiler Support of C 17 Features . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 294Appendix B - Resources and References . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 297

评论

发表评论必须先登陆, 您可以 登陆 或者 注册新账号 !


在线咨询: 问题反馈
客服QQ:174666394

有问题请留言,看到后及时答复